1. Related Applications
The following co-pending applications, which are filed the same day as this application, are hereby incorporated by reference: U.S. application Ser. No. 09/679,720, entitled “Routing Client Requests to Back-End Servers, and U.S. application Ser. No. 09/679,716, entitled “Transparently Redirecting Client Requests for Content.”
2. The Field of the Invention
The present invention relates to systems and methods for directing a client request to a server. More particularly, the present invention relates to systems and methods for directing a client request by using a front end server to select a back end server to respond to the request.
3. The Prior State of the Art
Many computer networks have a client/server architecture. In these architectures, the client computer is typically the requesting computer and the server computer responds to the request of the client. Client/server architectures can be found networks including local area networks (LANs), wide area networks (WANs), and the Internet. These systems are often used advantageously by various applications. Network messaging systems, for example, are often implemented using a client/server architecture. In network messaging, a mail server effectively functions as a post office for client computers. The mail server receives and distributes incoming electronic messages to the client computers and also forwards outgoing electronic messages.
These systems are becoming increasingly popular and in some systems, including the Internet, there is a great demand for the information that can be stored and managed by server computers. The demand is often significant and a single server computer is often not capable of meeting the demand. To increase accessibility, the data being accessed is often distributed over a bank of server computers. Distributing the data across a server bank, however, presents problems with regard to accessing the data.
For instance, when a new server is added to a server bank, the data is often redistributed over the servers. As a result, the URI of the data may change and clients may not have their requests fulfilled in these types of situations. Personal mailboxes in particular are subject to this problem because they are typically maintained on a single server. When a new server is added to the system and the personal mailboxes are reallocated across the serves, the URI will change.
In order to access this bank of server computers, these systems provide a routing server that receives the client request. However, the routing server usually stores some data and actually services part of the client's request, including Hyper Text Markup Language (HTML) rendering. In addition, the routing server does not really forward the request to one of the servers in the server bank. Rather, the routing server typically uses a separate protocol to access the data in the bank of server computers. The data returned from this server is incorporated into the response sent to the client from the routing server. As a result, the applications of this server system are limited to the applications of the routing server.
Other systems simply use the routing server to route client requests to one of the servers in the server bank. These systems, however, are not able to analyze the requests or perform other operations on these requests other than forward them to one of the servers. Necessarily, each server in the bank of servers completely replicates the data stored on the other servers. This type of system makes no allowance for customized or selective replication. For example, the routing server may be configured to route requests from a particular geography to a particular server in the server bank. Even though this data may be dedicated to a local topic that is of little interest to other users, this data must be replicated on all of the servers in the server bank. The routing server operates under the assumption that all of the data is available from each server. While this type of system does provide a type of load balancing with regard to client requests, this system is unable to respond dynamically at the time of the client request. These systems are also not capable of immediately adapting to new situations, such as adding or removing servers from the bank of servers. In addition, these types of systems cannot utilize selective data replication across the servers.
A system that provides load balancing of client requests against multiple servers therefore faces several issues that are difficult to overcome. For example, there is a need to improve the server efficiency by servicing requests as quickly as possible. Additionally, there is a need to allow access to the requested resources for as long as possible. Often, client requests fail when the server selected by the routing server is unavailable. Finally, there is a need to balance the requests across the available servers while dynamically responding to both changing system conditions and multiple client requests.